package com.zfei.gfb.api;


import com.zfei.gfb.api.domain.InboxTuple;
import com.zfei.gfb.api.domain.KeyTuple;
import com.zfei.gfb.api.domain.Page;
import com.zfei.gfb.bean.StatusException;

import java.util.List;
import java.util.Set;

public interface InboxService {

    int insert(InboxTuple tuple) throws StatusException;

    /**
     * 新增收件箱元组
     *
     * @param tuple 收件箱元组
     * @return 数量
     */
    int insert(KeyTuple tuple) throws StatusException;

    /**
     * 删除收件箱元组
     *
     * @param tuple 收件箱元组
     * @return 数量
     */
    int delete(InboxTuple tuple) throws StatusException;

    /**
     * 批量新增收件箱元组
     *
     * @param tuples 收件箱元组列表
     * @return 数量
     */
    int insert(List<InboxTuple> tuples) throws StatusException;

    /**
     * 批量删除收件箱元组
     *
     * @param tuples 收件箱元组列表
     * @return 数量
     */
    int delete(List<InboxTuple> tuples) throws StatusException;

    /**
     * 清空收件箱元组
     *
     * @param name 名字
     * @return 数量
     */
    int clear(String name) throws StatusException;

    /**
     * 计算收件箱元组数量
     *
     * @param name    名字
     * @param minTime 最小时间
     * @param maxTime 最大时间
     * @return 数量
     */
    long count(String name, Long minTime, Long maxTime) throws StatusException;


    long countOnly(String name, Long minTime, Long maxTime) throws StatusException;

    /**
     * 获取收件箱元组
     *
     * @param name    名字
     * @param eventId 事件ID
     * @return 收件箱元组
     */
    KeyTuple get(String name, String eventId) throws StatusException;

    /**
     * 批量获取收件箱元组
     *
     * @param name     名字
     * @param eventIds 事件ID列表
     * @return 收件箱元组列表
     */
    List<InboxTuple> get(String name, List<String> eventIds) throws StatusException;

    /**
     * 浏览收件箱
     *
     * @param name 名字
     * @param page 页面
     * @return 收件箱元组列表
     */
    List<KeyTuple> list(String name, Page page) throws StatusException;

    /**
     * 浏览收件箱
     *
     * @param names 名字集合
     * @param page  页面
     * @return 收件箱元组列表
     */
    List<InboxTuple> list(Set<String> names, Page page) throws StatusException;
}
